package com.han.jdbc.mybatis._02.plugins;

import java.util.Properties;

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;

/**
* @author hanpeng
* @version 创建时间：2020年7月20日 下午8:56:34
* @ClassName 类名称
* @Description 类描述
* 拦截哪个对象的哪个方法
* 
* 
*/
/*@Intercepts({@Signature(
		  type= Executor.class,
		  method = "update",
		  args = {MappedStatement.class,Object.class})})*/
@Intercepts(
			{
				@Signature(
						type=StatementHandler.class,
						method="parameterize",
						args=java.sql.Statement.class
						)
				
			}
		  )
public class ExamplePlugin implements Interceptor{

	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		//拦截目标对象的执行
		//执行目标方法
		System.out.println("MySecondPlugin...intercept:"+invocation.getMethod());
		Object obj = invocation.proceed();
		return obj;
	}

	@Override
	public Object plugin(Object target) {
		//包装目标对象 也就是说为目标对象创建代理对象
		//创建代理对象  当然我们也可以用动态代理
		System.out.println("MySecondPlugin...plugin:"+target);
		Object wrap = Plugin.wrap(target, this);
		return wrap;
	}

	@Override
	public void setProperties(Properties properties) {
		//将插件注册时的properties注册进来
		System.out.println(properties);
	}

}
